package com.zzy.java_gobang.api;

import com.zzy.java_gobang.model.User;
import com.zzy.java_gobang.model.UserMapper;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;


@RestController
//@RequestMapping("/userapi")
public class UserAPI {

    @Resource
    private UserMapper userMapper;

    @PostMapping("/login")
    @ResponseBody
    public Object login(String username, String password, HttpServletRequest req){
        //根据用户输入的内容，到我们的数据库里面查找
        //如果用户输入的用户存在，并且密码正确，就正常进行登录
        //User user = null;
        User user = userMapper.selectByName(username);
        System.out.println("[login] username="+username);
        if(user == null||!user.getPassword().equals(password)){
            //登录失败的两个情况
            System.out.println("登录失败");
            return new User();
        }
        //true:会话存在直接返回，不存在创建新的会话
        //false:存在返回，不存在返回空，不会创建
        HttpSession httpSession = req.getSession(true);
        //下次这个用户登录的时候，直接得到这个session信息
        httpSession.setAttribute("user", user);
        return user;
    }

    @PostMapping("/register")
    @ResponseBody
    public Object register(String username, String password){
        //用户名重复的时候会出现失败的情况，因此这个地方使用try-catch语句
        try{
            //创建对象
            User user = new User();
            //把这个用户名和密码设置进去
            user.setUsername(username);
            user.setPassword(password);
            //其他的字段在我们的mapper里面是有默认的数值的
            userMapper.insert(user);
            return user;
        }catch(org.springframework.dao.DuplicateKeyException e){
            User user = new User();
            return user;
        }

    }

    @GetMapping("/userInfo")
    @ResponseBody
    public Object getUserInfo(HttpServletRequest req){
        try{
            //这个地方是获取信息，没登录过就不可以创建新的会话
            HttpSession session = req.getSession(false);
            User user = (User)session.getAttribute("user");
            return user;
            //因为存在这个获取session是null的情况，这个时候调用getAttribute方法会出现空指针异常
        }catch(NullPointerException e){
            User user = new User();
            return user;
        }
    }
}
